package cn.tedu.oop;
/**本类用于测试多态成员的使用情况*/
public class TestDemo2 {
    public static void main(String[] args) {
        //8.创建纯纯的子类对象
        Dog2 d=new Dog2();
        System.out.println(d.sum);
        d.eat();
        Animal2 a=new Dog2();
        /**多态中，成员变量使用的是父类的*/
        System.out.println(a.sum);//10，多态的前提是继承+方法的重写
        /**多态中，方法的声明使用的是父类的，方法体使用的是子类的*/
        a.eat();
        /**多态中，调用的静态方法是父类的，因为多态对象把自己看作是父类类型，直接使用父类中的静态资源*/
        a.play();//static方法通过类名.方法名()调用
        Animal2.play();//static方法之能继承，不能重写，已经随着类的加载而加载，只有一份
        d.play();
        Dog2.play();//final关键字不能继承，不能重写



    }
}
//1.创建父类
class Animal2{
    //3.创建父类的成员变量
    int sum=10;
    //4.创建父类的普通方法
    public void eat(){
        System.out.println("吃啥都行~");
    }
    //5.定义父类的静态方法
    public static void play(){
        System.out.println("玩啥都行~");
    }

}
//2.创建子类
class Dog2 extends Animal2{
    //6.定义子类的成员变量
    int sum=20;
    //7.重写父类的方法
    @Override
    public void eat() {
        System.out.println("小狗爱吃肉包子");
    }
//    @Override
    /**这不是一个重写的方法，只是恰巧在两个类中出现了一模一样的两个方法
     * 注意：静态方法也属于静态资源，静态资源是属于类的，只有一份
     * 在哪个类里定义，就作为哪个类的资源来使用，不存在重写的现象*/
    public static void play(){
        System.out.println("小狗爱玩飞盘~");
    }
}
